package com.hzy.admin.controller.system;

import java.util.List;
import java.util.Map;

import com.hzy.admin.framework.ApiResult;
import com.hzy.admin.framework.annotation.AdminAuthorization;
import com.hzy.admin.framework.controller.ApiBaseController;
import com.hzy.admin.models.vo.system.SysMenuVo;
import com.hzy.admin.models.vo.system.TableVo;
import com.hzy.admin.services.system.ISysMenuService;
import com.hzy.admin.repository.entity.system.SysMenu;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

/**
 * 菜单控制
 */
@Api(tags = "菜单控制")
@RestController
@RequestMapping("/admin/system/menu")
@AdminAuthorization("e5d4da6b-aab0-4aaa-982f-43673e8152c0")
public class SysMenuController extends ApiBaseController<ISysMenuService> {
    public SysMenuController(ISysMenuService sysMenuService) {
        super(sysMenuService);
    }

    /**
     * 查询列表
     *
     * @param page   页码
     * @param size   页数
     * @param search 查询
     * @return json
     */
    @ApiOperation("查询列表")
    @PostMapping("/findList/{size}/{page}")
    @ResponseBody
    public ApiResult<?> findList(@PathVariable Integer page, @PathVariable Integer size, @RequestBody SysMenu search) {
        TableVo<Map<String,Object>> tableViewDto = this.service.findList(page, size, search);
        return this.resultOk(tableViewDto);
    }

    /**
     * 根据 id 查询表单信息
     *
     * @param id
     * @return json
     */
    @ApiOperation("根据 id 查询表单信息")
    @GetMapping({"/findForm/{id}", "/findForm"})
    @ResponseBody
    public ApiResult<?> findForm(@PathVariable(required = false) String id) {
        return this.resultOk(this.service.findForm(id));
    }

    /**
     * 保存数据
     *
     * @param form 要保存数据
     * @return json
     */
    @ApiOperation("保存数据")
    @PostMapping("/saveForm")
    @ResponseBody
    public ApiResult<?> saveForm(@RequestBody SysMenuVo form) {
        return this.resultOk(this.service.saveForm(form));
    }

    /**
     * 删除
     *
     * @param ids id集合
     * @return json
     */
    @ApiOperation("删除")
    @PostMapping("/deleteList")
    @ResponseBody
    public ApiResult<?> deleteList(@RequestBody List<String> ids) {
        this.service.deleteList(ids);
        return this.resultOk();
    }

    /**
     * 获取 菜单功能树
     *
     * @return
     */
    @ApiOperation("获取 菜单功能树")
    @GetMapping("/getMenusFunctionTree")
    @ResponseBody
    public ApiResult<?> getMenusFunctionTree() {
        return this.resultOk(this.service.getMenusFunctionTree());
    }

}
